#include "HalPWM.h"
#include "tim.h"
#include "Inc_Encoder.h"
uint16_t tim1_pwm[3]={0};

extern void ZY_FOC_loop();
extern void simfoc_loop();
extern void Simple_TimeOver(void);
void Stop_MotorPWM(void)
{
	
}
/// @brief 更新电机PWM
/// @param a A相
/// @param b B相
/// @param c C相
void Updata_MotorPWM(void)
{
	__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,tim1_pwm[0]);
	__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,tim1_pwm[1]);
	__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_3,tim1_pwm[2]);
	__HAL_TIM_DISABLE_IT(&htim1, TIM_IT_UPDATE);
}

void Set_MotorPWM(uint16_t a,uint16_t b,uint16_t c)
{
	tim1_pwm[0]=(PWM_PERIOD-a)/2;
  tim1_pwm[1]=(PWM_PERIOD-b)/2;
  tim1_pwm[2]=(PWM_PERIOD-c)/2;
	__HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE);
}

void Enable_MotorDrive(void)
{
	HAL_GPIO_WritePin(Driver_EN_GPIO_Port,Driver_EN_Pin,GPIO_PIN_SET);
}

void Disable_MotorDrive(void)
{
	HAL_GPIO_WritePin(Driver_EN_GPIO_Port,Driver_EN_Pin,GPIO_PIN_RESET);
}

uint32_t GetTimeValue(void)
{
	return __HAL_TIM_GetCounter(&htim6);
}
void Start_UserTime(void)
{
	__HAL_TIM_SetCounter(&htim6,0);
	HAL_TIM_Base_Start_IT(&htim6);
}
uint8_t i_m=0;
/**********************************************************
功能：定时器回调函数，处理电机PWM相位响应
**********************************************************/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if (htim == (&htim1))
	{
		Updata_MotorPWM();
	}
	if (htim == (&htim5)) //0.01ms
	{
		i_m++;
		if(i_m==10)
		{
			simfoc_loop();
			i_m=0;
		}
		ZY_FOC_loop();
	}
	if(htim==(&htim6))
	{
		Simple_TimeOver();
	}
	if(htim==&htim3)
	{
		if(__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3))
		{
			Encode_over(-1);
		}
		else
		{
			Encode_over(1);
		}
	}
}
